毎月雑談会の調整さんをSlack通知するリマインダーを作りました
同期メンバーで月に1回、ランチ雑談会(オンライン)を開催しています。
この日程調整に調整さんが大活躍なのですが、次の課題があります。
- 月1日なので、次の幹事を忘れがち(本人&他の人)
- 候補日(平日5-10日間)を手動で作るのがめんどくさい
これらを解決するため、Slackに通知する仕組みを作りました!
なお、本記事はAWS LambdaとServerless #1 Advent Calendar 2019の6日目です。
より自動化した続編は下記をご覧ください。
作りたいものを整理
ランチ雑談会
おおよそ次のように開催日を決めています。
- 毎月、第一週ぐらいに調整さんを作って日程調整する
- 候補日は、第二週と第三週ぐらい
やりたいこと
12/9(月) 12:00-13:00
という候補日を人間がたくさん作るのはめんどくさいので、コピペできるようにしたかったのです。
- 毎月最初の平日にSlackへ通知する
- 通知時に「イベント名」と「候補日の一覧」を含める(コピペ出来るように)
- 候補日
- 8日〜24日を対象とする
- 土日祝を除く
人間がふんわり判断していること(下記)を実現するのは大変なので、シンプルな動作にしました。
- 1日が木曜だから、募集は9日の金曜までにしとこ
- 1日が土曜だから、募集は7日の金曜までやな
- 今月はre:Inventあるし、10日で締め切って、11日から候補日にしとこ
- など……
実際に登録する候補日は人間が判断して編集しますが、コピペできるので楽になるはずです。
サーバーレスアプリの作成
AWS SAMプロジェクトの作成
まずは、AWS SAMプロジェクトを作成します。
sam init --runtime python3.7 --name Chouseisan-reminder
ライブラリの追加
日本の祝日をjpholidayで判定したいので、requirements.txt
にライブラリ名を追記します。
requests jpholiday
テンプレートの作成
次のAWS SAMテンプレートを作成します。SlackのIncomingWebHookUrl
は、SSMパラメータ名を参照して実際の値がLambdaの環境変数にセットされます。
Lambdaの作成
次のLambdaを作成します。
デプロイ準備
デプロイ用のS3バケットを作成する
すでにある場合はSkipします。
aws s3 mb s3://cm-fujii.genki-chouseisan-reminder-deploy-bucket
SlackのIncomingWebHookUrlを作成する
下記を参考に作成します。作成したIncomingWebHookUrl
はメモしておきます。
SSMのパラメータストアにSlackの通知先URLを追加する
次のコマンドで追加します。URLの先頭にhttps://
があると、このコマンド実行が失敗するため、取り除いています。
aws ssm put-parameter \ --type 'String' \ --name '/Slack/INCOMING_WEBHOOK_URL/channel_name/choseisan_reminder' \ --value 'hooks.slack.com/services/xxxxx/yyyyy/zzzzz'
デプロイ
ビルド
まずはビルドします。
sam build
package
次にLambdaコードをS3バケットにアップロードします。
sam package \ --output-template-file packaged.yaml \ --s3-bucket cm-fujii.genki-chouseisan-reminder-deploy-bucket
deploy
最後にデプロイします。--parameter-overrides
でSSMパラメータのKey名を指定しています。これにより、Lambdaの環境変数にSlackのIncomingWebHookUrl
が設定されます。
sam deploy \ --template-file packaged.yaml \ --stack-name Chouseisan-Reminder-Stack \ --capabilities CAPABILITY_NAMED_IAM \ --no-fail-on-empty-changeset \ --parameter-overrides ChouseisanNotifySlackUrl=/Slack/INCOMING_WEBHOOK_URL/channel_name/choseisan_reminder
動作確認
テスト動作として、Lambdaをコンソール上からテスト実行させてみました(最初の通知判定は外しておく)。すると……。
無事に通知が来ました!!!
これで、調整さんの登録を忘れない & 候補日の入力が楽になりました!
さいごに
ユーザーの使ってみた感想を聞けるのは1ヶ月後ですが、楽しみに待ちたいと思います!!